
/*******************************************************
    提供几个数据库操作的函数.
    在连接刚刚建立时，清空AliveCmdRec表。
连接断开前，也清空AliveCmdRec表。
  *****************************************************/
#include "db.h"
#include "macro.h"
#include <QMessageBox>
#include <QtSql>
#include <QTimer>
DatabaseOperation::DatabaseOperation(QObject* parent)
    :QObject(parent)
{
    timerForDBConnect=new QTimer(this);
    query=NULL;
    isConnected=false;
    //queryForTimer-=NULL;
}

/***************************************************
建立与数据库的连接.
获得该连接的方法：
QSqlDatabase db=QSqlDatabase::database("cFromNetServer");
相应的，要用下面的语句来定义一个QSqlQuery。
QSqlQuery query(QSqlDatabase::database("cFromNetServer"));
******************************************************/
bool DatabaseOperation::createConnection(const QString & dataBase,const QString & host,
   const QString & user, const QString & passWord, const QString &connectionName) //建立一个连接
{
    dbConnectionName=connectionName;
     //plugin的搜索路径增加当前目录下的plugins文件夹。该语句主要为了发布之便。
   // qApp->addLibraryPath(qApp->applicationDirPath () + "/plugins");
    //qApp->addLibraryPath(qApp->applicationDirPath () + "/lib");

    //添加驱动
    QSqlDatabase connectionFromServer=QSqlDatabase::addDatabase(DB_TYPE,connectionName);
#ifndef ANDROID
    connectionFromServer.setHostName( host);//数据库所在主机的IP
#endif
    connectionFromServer.setDatabaseName(dataBase);//操作example数据库
#ifndef ANDROID
    if(!connectionFromServer.open(user,passWord))
#else
    if(!connectionFromServer.open())
#endif
    {
        emit sigErrorInfo("ERROR: Database error. In databaseoperation::createconnection. "+
                 connectionFromServer.lastError().text());
        return false;
    }
    else
    {
        isConnected=true;
        timerForDBConnect->start(MSForDBConnect);
        connect(timerForDBConnect,SIGNAL(timeout()),this,SLOT(timerEventDBConnect()));

        query=new QSqlQuery(QSqlDatabase::database(connectionName));
         query->setForwardOnly(true);
       // queryForTimer=new QSqlQuery(QSqlDatabase::database("cFromNetServer2"));
       // queryForTimer->setForwardOnly(true);
        if( query->exec("delete from AliveCmdRec")  ) //清空活动命令记录表
         {
#ifdef debu
            qDebug()<<"AliveCmdRec cleared";
#endif
        }
    }
    return true;
}

bool    DatabaseOperation::insertLog(QString issue)
{
    QSqlQuery tempQuery(QSqlDatabase::database(dbConnectionName));

    if(tempQuery.exec("insert into Log(issue) values('"+issue+
           "')"))
        return true;
    else
    {
        emit sigErrorInfo("Error:insert Log fail in databaseOperation::insertLog()"+
                            tempQuery.lastError().text());
        return false;
    }
}

void DatabaseOperation::timerEventDBConnect()
{
    QSqlQuery tempQuery(QSqlDatabase::database(dbConnectionName));

    tempQuery.exec("select 1");

    //queryForTimer->exec("select 1");
}



